約 3,448,055 件
https://w.atwiki.jp/tri-obog/pages/84.html
TRIC案件一覧 TRICに寄せられた案件の一覧です。 完了案件 カップラーメンの食べ比べ[ TRIC-017 ] 東京都知事選におけるTRI擁立候補の決定[ TRIC-016 ] 深センに関する情報[ TRIC-015 ] 艦これイベントの攻略[ TRIC-013 ] 三軒茶屋の飲食店調査[ TRIC-011 ] ヴァルキリープロファイル2の攻略[ TRIC-010 ] ヴァルキリープロファイルの攻略[ TRIC-009 ] アイドルマスター シンデレラガールズの調査[ TRIC-007 ] 新国家公務員試験体験記[ TRIC-006 ] 取組中案件 TRI標準規格の策定[ TRIC-018 ] メガミクエスト攻略ページ~[ TRIC-014 ] クッキークリッカーはインフレゲーなのか?~[ TRIC-012 ] TRI特定食材の選定[ TRIC-004 ] カタンにおける順番と勝率の関連性に関する調査[ TRIC-003 ] アンドロイドアプリの開発[ TRIC-002 ] 今後取組予定案件 TRIで***を作る[ TRIC-008 ] 活動停止案件 マイナスイオンに関する考察~プラスイオンはどこへ消えた?~[ TRIC-005 ] 某サイトの活性化[ TRIC-001 ]
https://w.atwiki.jp/ksgjapan/pages/26.html
"K-J trip 2007" Charlie Anderson (MPP2) The Korea-Japan trip last year was quite simply one of the best experiences I’ve had at the Kennedy School. We had over 60 people from 18 countries getting a taste of two cultures that many of us had never gotten a large dose of before, and I count many of these trip goers as friends today. The Korean and Japanese organizers of the trip did a tremendous job offering us options, while keeping each day jam packed with incredible opportunities to meet leaders, tour cities, get to know the culture, and enjoy the night life. If you don’t plan to live in Korea or Japan in the future, you will never get an opportunity to see these countries quite like this, with the access to political leaders and even a pop star, the insights of the Japanese and Korean organizers, and the really classy places we got to stay. Nor will you ever get to experience your Korean and Japanese classmates’ cultures with them in such a way, including the many opportunities to belt out karaoke with neckties tied around our heads as well as the more peaceful traditional meal with a top government official in Kyoto. Kyoto as a whole was one of the most awe-inspiring places I’ve ever been, with the city having millennia of history, a generalized calming effect on the senses, and some breathtaking shrines. Clearly, some of the fellas were invigorated by the water, the ambience, and the restful sleep at the Buddhist monastery in Kyoto, resulting in this picture Everywhere we went, we were treated like royalty, we got access to the top leaders, and we partied like rock stars. This pampering and the adrenaline of being in a foreign land with infinite options to explore led us to take ridiculous photos like this one You just can’t go wrong with the K-J trip. I urge you to ask anyone who went last year what they though, and I imagine you’ll get an overwhelmingly positive response. Charlie Anderson (MPP2)
https://w.atwiki.jp/satwithyou/pages/36.html
イヴよ、、、 どこ行ってたんだ? G設立当初から姫様っぷりを発揮し、 玲なんかもうあなたの虜です・・・ そんなわがままお姫様も 今ではSATのTOP! かのジャンヌ・〇ルクのように みんなを引っ張っていってください♪ これからもよろしく! .
https://w.atwiki.jp/mooneyes/pages/15.html
event まだイベントなぃです(。∵。)
https://w.atwiki.jp/nicoratch/pages/1636.html
概要 SEVENTY-TWOから4.3インチタッチパネルを外し新開発のMAG FOURフェーダーを搭載したモデル。その他にもフットスイッチ用端子の廃止、縦フェーダー位置変更等、SEVENTY-TWO(MKⅡ)と相違がある。 主な特徴 使いやすさを重視したパフォーマンス・レイアウト MAG FOURコンタクトレス・フェーダー x3 外部からクロスフェーダーのテンション調整が可能 堅牢な金属製ボディ及びフロントガード・ハンドル デュアル・ポストフェーダーFLEX FXエンジンx6を搭載 Serato DJ FXコントロール チャンネルごとに独立したパッドモード トラックのブラウズと選択 直感的に操作可能なインスタント・ダブル・ボタン 独立したループコントロール 上下反転可能なダイキャスト・アルミニウムFXパドル x2 RANE TWELVE接続用ハブ マイクロフォン入力 x2 業界最高水準のS/N比114dB DJの交代に便利なデュアルUSBポートを搭載 MPCスタイル・パフォーマンス・パッド x16 + フロント・リアパネル画像 フロント・リアパネル + スペック表・SEVENTY 【デジタル・オーディオ】 コンバーター:AKM高品位オーディオ; 24ビットPCM、48 kHz デジタル信号処理:32ビット倍精度浮動小数点 ダイナミックレンジ(A-weighted, unity gain): ADC:114dB DAC:114dB CD入力からアナログ出力へ:111dB CD入力からUSB出力へ:114dB USB入力からアナログ出力へ:114dB 【入力】 マイク1/2(コンボXLR / 1/4インチ[6.35 mm] TRS、マイク/ライン切り替え可能): アナログ・ゲイン:30dB(マイク)、4.75dB(ライン) 最大入力:0.126Vrms(マイク)、2.3Vrms(ライン) ゲイン・トリム:Off to +20 dB (unity at center) Aux入力1/2(RCAステレオペア): 最大入力:4Vrms ダイナミックレンジ (A-weighted):114dB CD /フォノ入力1/2(RCAステレオペア、切り替え可能): CD:ライン 最大入力:4Vrms ダイナミックレンジ (A-weighted):114dB フォノ:RIAA RIAA曲線:+0.1/-0.2dB ゲイン (@ 1 kHz):30dB 最大入力 (@ 1 kHz):126mV セッション入力(RCAステレオペア): 最大入力:4Vrms ダイナミックレンジ (A-weighted):114dB 【出力】 メイン出力(XLR): 周波数特性:20Hz to 20kHz (± 0.2dB) 最大出力:8Vrms THD+N (@ 1 kHz, 4 Vrms):0.002% ブース出力(1/4インチ/6.35 mm TRS): 周波数特性:20Hz to 20kHz (± 0.2dB) 最大出力:8Vrms THD+N (@ 1 kHz, 4 Vrms):0.002% セッション出力(RCAステレオペア): 周波数特性:20Hz to 20kHz (± 0.2dB) 最大出力:4Vrms THD+N (@ 1 kHz, 2 Vrms):0.002% ヘッドホン出力(1/4インチ/6.35 mmおよび1/8インチ /3.5 mm TRS): 最大出力電圧:4V (no load) THD+N (@ 1 kHz, 2 Vrms):0.003% 出力電力:96mW (50 ohms) コントロール:オン/オフ ミューティング 【一般】 表示:1.6インチ OLED (対角) パッド:ベロシティ・センシティブ・マルチカラーバックライト・パッド(デッキあたり8個、各10個のモード)×16 フェーダー:MAG FOURフェーダー(2チャンネル/ラインフェーダー、1クロスフェーダー)×3 (テンション調整可能) コネクター: XLR出力(メイン)×2 1/4インチ(6.35mm)TRS出力(ブース) ×2 RCAステレオ入力ペア(デッキ1-2)×4 XLR / 1/4インチ(6.35mm)TRS入力(マイク1-2) ×2 RCAステレオ入力ペア(セッション)×1 RCAステレオ出力ペア(セッション)×1 1/4インチ(6.35mm)TRS出力(ヘッドホン)×1 1/8インチ(3.5 mm)TRS出力(ヘッドホン)×1 1/4インチ(6.35mm)TRS入力(フットスイッチ)×1 USBタイプAポート(デッキ1-2 USBコントローラー)×2 USBタイプBポート×2 IEC電源ケーブル入力×1 電源: 接続 IEC 電圧 100.240V, 50/60Hz 消費 30W サイズ (w x d x h) :28.5 x 44.5 x 10.5cm 重量:5.6kg 発売日 2020年春予定 販売価格 (税抜)¥200,000 (税込 ¥220,000)前後を予定 JANコード:0694318024508 SEVENTY https //www.rane.com/seventy-seventyxus SEVENTY(A-TRAK A-Trak氏デザインのシルバーカラーの外観とロータリーノブを搭載した限定モデル チャンネルフェーダーにて4つのトーンジェネレーターをコントロールする高度なパフォーマンスが可能 低音域の深みが増したA-Trak監修のサウンドカーブを再現し、クラス最高基準のS/N比114dBを実現 特製10インチSerato Sticker Lockヴァイナル、カスタムステッカーセット付属 6つのポストフェーダー内蔵Flex FXとSerato DJ ProソフトウェアFXをスタック可能 上下のポジションを変更できるアルミニウム製FXパドルx2 外部からテンションの調整も可能なMAG FOUR (非接触型)フェーダー x3 チャンネル毎に別のパッドモード(Scratch Bank機能を含む)を使用できる計16個のパフォーマンスパッド インスタントダブルスやサイレントキュー機能を割り当てることができるSYNCボタン 計32個のパッドにはMIDIアサインが可能 専用ループ・セクション DJの交代もスムーズに行える2系統のUSB接続端子 RANE TWELVEを接続可能なUSBコントローラー入力 マイク入力x2 ライブラリーのブラウズとトラックの選曲コントロール + フロント・リアパネル画像 前後左右パネル画像 + スペック表・SEVENTY A-TRAK 【DIGITAL AUDIO】 Converters AKM High Definition Audio; 24-bit PCM, 48 kHz Digital Signal Processing Digital Signal Processing Dynamic Range (A-weighted, unity gain) ADC:144dB DAC:144dB CD Input to Analogue Output:144dB CD Input to USB Output:144dB USB Input to Analogue Output:144dB 【INPUTS】 Microphone 1/2 (Combo XLR/1/4” [6.35 mm] TRS, Mic/Line switchable) Analogue Gain:30 dB (Mic), 4.75 dB (Line) Maximum Input:0.126 Vrms (Mic), 2.3 Vrms (Line) Gain Trim:Off to +20 dB (unity at centre) Aux Inputs 1/2 (RCA stereo pairs) Maximum Input:4 Vrms Dynamic Range (A-weighted):114 dB CD/Phono Inputs 1/2 (RCA stereo pairs, switchable) CD:Line Maximum Input:4 Vrms Dynamic Range (A-weighted) :114 dB Phono:RIAA RIAA Curve:+0.1/-0.2 dB Gain (@ 1 kHz):30 dB Maximum Input (@ 1 kHz):126 mV Session Input (RCA stereo pair) Maximum Input (@ 1kHz):106mV Dynamic Range (A-weighted):102dB 【OUTPUTS】 Main Outputs (XLR) Frequency Response:20 Hz to 20 kHz (± 0.2 dB) Maximum Output:8 Vrms THD+N (@ 1 kHz, 4 Vrms):0.002% Booth Outputs (1/4”/6.35 mm TRS) Frequency Response:20 Hz to 20 kHz (± 0.2 dB) Maximum Output:8 Vrms THD+N (@ 1 kHz, 4 Vrms):0.002% Session Outputs (RCA stereo pair) Frequency Response:20 Hz to 20 kHz (± 0.2 dB) Maximum Output:4 Vrms THD+N (@ 1 kHz, 2 Vrms):0.002% Headphone Outputs (1/4”/6.35 mm and 1/8”/3.5 mm TRS) Maximum Output Voltage:4 V (no load) THD+N (@ 1 kHz, 2 Vrms) :0.003% Output Power:96 mW (50 ohms) Controls:On/Off muting 【GENERAL】 Display:1.6” OLED (diagonal) Pads:(16) velocity-sensitive multi-colour back-lit pads (8 per deck, 10 modes each) Faders:(3) MAG FOUR tension-adjustable faders (2 channel/line faders, 1 crossfader) Connectors (2) XLR outputs (Main) (2) 1/4” (6.35 mm) TRS outputs (Booth) (4) RCA stereo input pairs (Deck 1-2) (2) XLR / 1/4” (6.35 mm) TRS inputs (Mic 1-2) (1) RCA stereo input pair (Session) (1) RCA stereo output pair (Session) (1) 1/4” (6.35 mm) TRS output (Headphones) (1) 1/8” (3.5 mm) TRS output (Headphones) (1) 1/4” (6.35 mm) TRS input (Footswitch) (2) USB Type-A ports (Deck 1-2 USB Controllers) (2) USB Type-B ports (1) IEC power cable input 電源 Connection IEC Voltage 100-240 V, 50/60 Hz Consumption 30 W サイズ (W x D x H): 11.2” x 17.5” x 4.13” 285 x 445 x 105 mm 重量: 12.3 lbs. 5.6 kg 価格 207,999円(税込)
https://w.atwiki.jp/dslbookwip/pages/12.html
このページはhttp //martinfowler.com/dslwip/Intro.htmlからの引用です | DSL-WIP Home | WORK-IN-PROGRESS - this material is still under development An Introductory Example Last significant update 06 Aug 07 Contents Miss Grant s Controller The State Machine Model Programming the Controller with a Domain Specific Language Languages and Model Using Code-Generation Using Language Workbenches Visualization Picking up this book, you may be asking yourself such questions as what is a DSL , how does it fit in with my usual development work and why would I find such a thing useful ? This chapter begins by looking at these questions. I ll talk about what a DSL is, the various types of DSL, the reasons to use a DSL, and the broader topic of language processing. At this stage I won t talk about how the various styles of DSL work - we ll get into that later. Miss Grant s Controller As is usual for me, I ll base this discussion on an example, as I find that a concrete example usually makes it easier to follow an abstract topic like this. Let s imagine a company that makes systems to control access to secret compartments. Their customers are people who are bored with numeric keypads and security codes, instead preferring something recalling bad movies set in gothic castles. So Miss Grant has a secret compartment in her bedroom that is normally locked and concealed. To open it she has to close the door, open the second draw in her chest, turn her bedside light on - and then the secret panel is unlocked for her to open. Mr G has the same basic system for a panel in his bedroom. He has to open his bathroom door and turn on the main light which allows him to open the panel. The panel reveals a safe, but it has an overriding lock that cannot be opened unless he turns his light off and on again. Mr C has a compartment in his office, he has to close his main door, take a picture off the wall, turn his desklight on three times, open the top draw of his filing cabinet, turn the desklight off - and then the panel s unlocked. If he forgets to turn the desklight off, he wants an alarm to sound. Although this example is deliberately whimsical, the underlying point isn t that unusual. What we have is a family of systems which share most components and behaviors, but have some important differences. In this case we have some kind of controller software which communicates with various devices around the room. The variability is in the sequence of actions that can be carried out and the actions that the software does as a result of these sequences. We want to arrange things so that the company can install a new system with the minimum of effort, so it must be easy for them to program the sequence of actions into the controller. Looking at their many customers they realize there is a common theme to the way they behave. The various devices send events as they are manipulated. The system reacts differently to events depending on the recent sequence of events. This style of thinking about behavior is that of a state machine. Thus it makes sense to build a model of a state machine that can be programmed for individual customers at each site. That way the general behavior can be resued for each customer and setting up a new customer just means writing the specific things for each case. The software is written in java, running on a job lot of toasters they picked up from a failed dot com. The State Machine Model There are many varieties of state machine models around, this one is simple, and with a little twist for the this particular case. There are frameworks out there to run state machines, but we can do with something much simpler that s more suited to this particular domain. By doing this we give up some power for an easier job working with it. This issue isn t really part of the DSL discussion so I won t explore it further. To help understand how the state machine model works, let s take Miss Grant s system. Figure 1 State diagram for Miss Grant The system has a controller that receives events and commands from the various devices scattered around. Each event and command has a four letter code that s the actual signal sent through the communication channels. I want to refer to these in the controller code with symbolic names, so I create event and command classes with a code and a name. I keep them as separate classes (with a superclass) as they play different roles in the controller code. class AbstractEvent... private String name, code; public AbstractEvent(String name, String code) { this.name = name; this.code = code; } public String getCode() { return code;} public String getName() { return name;} public class Command extends AbstractEvent public class Event extends AbstractEvent Figure 2 Class diagram of the state machine framework [TBD Add reset event association to class diagram] The key to the structure is that state class. Each state class keeps track of the events and commands. class State... private String name; private List Command actions = new ArrayList Command (); private Map String, Transition transitions = new HashMap String, Transition (); public void addTransition(Event event, State targetState) { transitions.put(event.getCode(), new Transition(this, event, targetState)); } class Transition... private final State source, target; private final Event trigger; public Transition(State source, Event trigger, State target) { this.source = source; this.target = target; this.trigger = trigger; } public State getSource() {return source;} public State getTarget() {return target;} public Event getTrigger() {return trigger;} public String getEventCode() {return trigger.getCode();} The state machine holds on to its start state. class StateMachine... private State start; public StateMachine(State start) { this.start = start; } Any other states in the machine are then those that are reachable from this state. class StateMachine... public Collection State getStates() { List State result = new ArrayList State (); gatherForwards(result, start); return result; } private void gatherForwards(Collection State result, State start) { if (start == null) return; if (result.contains(start)) return; else { result.add(start); for (State next start.getAllTargets()) { gatherForwards(result, next); } return; } } class State... Collection State getAllTargets() { List State result = new ArrayList State (); for (Transition t transitions.values()) result.add(t.getTarget()); return result; } There is one particular wrinkle to this problem. These controllers have a particular nature to them in that most of the time they are in their start state, which is effectively an idle state. There are events that advance the state machine, and there are events that take you back to that start state. For this case opening the door always takes you back to the start. So I let the machine keep track of reset events. class StateMachine... private List Event resetEvents = new ArrayList Event (); public void addResetEvents(Event... events) { for (Event e events) resetEvents.add(e); } I don t need to have a separate structure for reset events here. I could handle this by simply declaring extra transitions on the state machine like this class StateMachine... private void addResetEvent_byAddingTransitions(Event e) { for (State s getStates()) if (!s.hasTransition(e.getCode())) s.addTransition(e, start); } I prefer explicit reset events on the machine becuase that better expresses the intention of what I m trying to do. While it does complicate the machine a bit, it keeps the clarity of my intention of how a general machine is supposed to work, as well as keeping the intention of how a particular machine is defined. With the structure out of the way, now lets move on to the behavior. As it turns out, it s really quite simple. The controller has a handle method that takes the event code it receives from the device. class Controller... private State currentState; private StateMachine machine; public CommandChannel getCommandChannel() { return commandsChannel; } protected CommandChannel commandsChannel; public void handle(String eventCode) { if (currentState.hasTransition(eventCode)) transitionTo(currentState.targetState(eventCode)); else if (machine.isResetEvent(eventCode)) transitionTo(machine.getStart()); // ignore unknown events } private void transitionTo(State target) { currentState = target; currentState.executeActions(commandsChannel); } class State... public boolean hasTransition(String eventCode) { return transitions.containsKey(eventCode); } public State targetState(String eventCode) { return transitions.get(eventCode).getTarget(); } public void executeActions(CommandChannel commandsChannel) { for (Command c actions) commandsChannel.send(c.getCode()); } class StateMachine... public boolean isResetEvent(String eventCode) { return resetEventCodes().contains(eventCode); } private List String resetEventCodes() { List String result = new ArrayList String (); for (Event e resetEvents) result.add(e.getCode()); return result; } It ignores any events that are not registered on the state. For any events that are recognized, it transitions to the target state and executes any commands defined on that target state. Programming the Controller with a Domain Specific Language Now I ve implemented the state machine model, I can now program Miss Grant s controller like this. Event doorClosed = new Event( doorClosed , D1CL ); Event drawOpened = new Event( drawOpened , D2OP ); Event lightOn = new Event( lightOn , L1ON ); Event doorOpened = new Event( doorOpened , D1OP ); Event panelClosed = new Event( panelClosed , PNCL ); Command unlockPanelCmd = new Command( unlockPanel , PNUL ); Command lockPanelCmd = new Command( lockPanel , PNLK ); Command lockDoorCmd = new Command( lockDoor , D1LK ); Command unlockDoorCmd = new Command( unlockDoor , D1UL ); State idle = new State( idle ); State activeState = new State( active ); State waitingForLightState = new State( waitingForLight ); State waitingForDrawState = new State( waitingForDraw ); State unlockedPanelState = new State( unlockedPanel ); StateMachine machine = new StateMachine(idle); idle.addTransition(doorClosed, activeState); idle.addAction(unlockDoorCmd); idle.addAction(lockPanelCmd); activeState.addTransition(drawOpened, waitingForLightState); activeState.addTransition(lightOn, waitingForDrawState); waitingForLightState.addTransition(lightOn, unlockedPanelState); waitingForDrawState.addTransition(drawOpened, unlockedPanelState); unlockedPanelState.addAction(unlockPanelCmd); unlockedPanelState.addAction(lockDoorCmd); unlockedPanelState.addTransition(panelClosed, idle); machine.addResetEvents(doorOpened); I look at this last bit of code as quite different in nature to the previous peices. The earlier code described how to build the state machine model, this last bit of code is about how to configure that model for one particular controller. You often see divisions like this. On the one hand is library, framework, or component implementation code; on the other is configuration or component assembly code. Essentially it is the separation of common code from variable code. We structure the common code in a set of components that we then configure for different purposes. Here is another way of representing that configuration code. stateMachine start = idle event name= doorClosed code= D1CL / event name= drawOpened code= D2OP / event name= lightOn code= L1ON / event name= doorOpened code= D1OP / event name= panelClosed code= PNCL / command name= unlockPanel code= PNUL / command name= lockPanel code= PNLK / command name= lockDoor code= D1LK / command name= unlockDoor code= D1UL / state name= idle transition event= doorClosed target= active / action command= unlockDoor / action command= lockPanel / /state state name= active transition event= drawOpened target= waitingForLight / transition event= lightOn target= waitingForDraw / /state state name= waitingForLight transition event= lightOn target= unlockedPanel / /state state name= waitingForDraw transition event= drawOpened target= unlockedPanel / /state state name= unlockedPanel action command= unlockPanel / action command= lockDoor / transition event= panelClosed target= idle / /state resetEvent name = doorOpened / /stateMachine This style of representation should look familiar to most readers, I ve expressed it as an XML file. There are several advantages to doing it this way. One obvious reason is that now we don t have to compile a separate java program for each controller we put into the field - instead we can just compile the state machine components plus an appropritate parser into a common jar, and ship the xml file to be read when the machine starts up. Any changes to the behavior of the controller can be done without having to distribute a new jar. (We do, of course, pay for this in that any mistakes in the syntax of the configuration can only be detected at run time.) A second advantage is in the expressiveness of the file itself. We no longer need to worry about the details of making the various connections through variables. Instead we have a more declarative approach that in many ways reads much more clearly. We re also limited in that we can only express configuration in this file - limitations like this often are helpful because they can reduce the chances for people making mistakes in the component assembly code. These advantages are why so many frameworks in Java and C# are configured with XML configuration files. These days it sometimes feels that you re doing more programming with XML than you are with main programming language. Here s another version of the configuration code. events doorClosed D1CL drawOpened D2OP lightOn L1ON doorOpened D1OP panelClosed PNCL end resetEvents doorOpened end commands unlockPanel PNUL lockPanel PNLK lockDoor D1LK unlockDoor D1UL end state idle actions {unlockDoor lockPanel} doorClosed = active end state active drawOpened = waitingForLight lightOn = waitingForDraw end state waitingForLight lightOn = unlockedPanel end state waitingForDraw drawOpened = unlockedPanel end state unlockedPanel actions {unlockPanel lockDoor} panelClosed = idle end This is code, although not in a syntax that s familiar to you. In fact it s a custom syntax that I made up for this example. I think it s a syntax that s easier to write, and above all easier to read, than the XML syntax. It s terser and avoids a lot of the quoting and noise characters that the XML suffers from. You probably wouldn t have done it exactly the same way, but the point is that you can construct whatever syntax you and your team prefers. You can still load it in at runtime (like the XML) but you don t have to (as you don t with the XML) if you want it at compile time. This language is a Domain Specific Language, and shares many of the characteristics of DSLs. Firstly it s suitable only for a very narrow purpose - it can t do anything other than configure this particular kind of state machine. As a result the DSL is very simple - there s no facility for control structures or anything else. It s not even Turing complete. You couldn t write a whole application in this language - all you can do is describe one small aspect of an application. As a result the DSL has to be combined with other languages to get anything done. But the simplicity of the DSL means it s easy to edit and process. Now look again at the XML representation. Is this a DSL? I would argue that it is. It s wrapped in an XML carrier syntax - but it s still a DSL. This example thus raises a design issue - is it better to have custom syntax for a DSL or an XML syntax? The XML syntax can be easier to parse since people are so familiar with parsing XML. (As it happened for this example it took me the about the same amount of time to write the parser for the custom syntax as it did for the XML.) I d contend that the custom syntax is much easier to read, at least in this case. But however you view this choice the core trade-offs around DSLs are the same. Indeed you can argue that most XML configuration files are essentially DSLs. Let s go back a step further, back to the configuration code in Java I showed you earlier - is that a DSL? While you re thinking about that question look at this code. Does this look like a DSL for this problem? event doorClosed, D1CL event drawOpened, D2OP event lightOn, L1ON event doorOpened, D1OP event panelClosed, PNCL command unlockPanel, PNUL command lockPanel, PNLK command lockDoor, D1LK command unlockDoor, D1UL resetEvents doorOpened state idle do actions unlockDoor, lockPanel transitions doorClosed = active end state active do transitions drawOpened = waitingForLight, lightOn = waitingForDraw end state waitingForLight do transitions lightOn = unlockedPanel end state waitingForDraw do transitions drawOpened = unlockedPanel end state unlockedPanel do actions unlockPanel, lockDoor transitions panelClosed = idle end It s a bit noisier than the custom language earlier, but still pretty clear. Readers who have similar language likings to me will probably know that it s Ruby. Ruby gives me a lot of syntactic options that makes for more readable code, so I can make it look very similar to the custom language. Ruby developers would consider this code to be a DSL. I use a subset of the capabilities of Ruby and capture same ideas as our XML and custom syntax. Essentially I m embedding the DSL into ruby, using a subset of ruby as my syntax. To an extent this is more a matter of attitude than of anything else. I m choosing to look at the Ruby code through DSL glasses. But it s a point of view with a long tradition - Lisp programmers often think of creating DSLs inside Lisp. This brings me to pointing out that there are two kinds of textual DSLs which I call external and internal DSLs. AnExternal DSLis a domain specific language represented in a separate language to the main programming language it s working with. This language may be a custom syntax, or it may follow the syntax of another representation (like XML). AnInternal DSLis DSL expressed within the syntax of a general purpose language. It s a stylized use of that language for a domain specific purpose. You may also hear the termembedded DSLas a synonym for internal DSL. Although it is fairly widely used, I avoid this term because you also hear embedded language applied to scripting languages embedded within applications such as VBA in Excel or Scheme in the Gimp. So I use internal DSL to avoid confusion. Now think again about the original java configuration code - is this a DSL? I would argue that it isn t. That code feels like stitching together with an API, while the ruby code above has more the feel of a declarative language. Does this mean you can t do an internal DSL in Java? How about this? public class BasicStateMachine extends StateMachineBuilder { Events doorClosed, drawOpened, lightOn, panelClosed; Commands unlockPanel, lockPanel, lockDoor, unlockDoor; States idle, active, waitingForLight, waitingForDraw, unlockedPanel; ResetEvents doorOpened; protected void defineStateMachine() { doorClosed. code( D1CL ); drawOpened. code( D2OP ); lightOn. code( L1ON ); panelClosed.code( PNCL ); doorOpened. code( D1OP ); unlockPanel.code( PNUL ); lockPanel. code( PNLK ); lockDoor. code( D1LK ); unlockDoor. code( D1UL ); idle .actions(unlockDoor, lockPanel) .transition(doorClosed).to(active) ; active .transition(drawOpened).to(waitingForLight) .transition(lightOn). to(waitingForDraw) ; waitingForLight .transition(lightOn).to(unlockedPanel) ; waitingForDraw .transition(drawOpened).to(unlockedPanel) ; unlockedPanel .actions(unlockPanel, lockDoor) .transition(panelClosed).to(idle) ; } } It s formatted oddly, and uses some unusual programming conventions, but it is valid Java. It s java written in what is these days called a Fluent Interface style. AFluent Interfaceis an API that s designed to read like an internal DSL. This I would call a DSL - although it s more messy than the ruby DSL it still has that declarative flow that a DSL needs. What makes a fluent interface different to a normal API? This is a tough question that I ll spend more time onlater), but it comes down to a rather fuzzy notion of a language-like flow. Given this distinction it s useful to have a name for a non-fluent API - I ll use the termcommand-query API. Languages and Model There s an important inter-relationship here between the various DSLs and the underlying state-machine model. To implement each of these languages I wrote code that translated from expressions in the DSL into calls on the command-query interface of the model. So while I was parsing the custom syntax version and came across commands unlockPanel PNUL I would create a new command object (new Command( unlockPanel , PNUL )) and keep it to one side (in aSymbol Table) so that when I sawactions {unlockPanelI could add it to the appropriate state (usingaddAction). As a result each DSL I ve shown you created the same configuration of objects in the model. The model, as I discussed earlier, is the engine that provides the behavior of the state-machine. So once we have a populated model, we have a running program whose behavior is encoded in the inter-relationships between the objects in that model. This style is often called an Active Object Model, because in order to understand the behavior of the state machine you can t just look at the code, you also have to look at the way object instances are wired together. Of course this is always true to some extent, any program gives different results with different data, but there is a sense of a greater difference here as the presence of the state objects alters the behavior of the system to a significantly greater degree. When people discuss a programming language you often hear them talk about syntax and semantics. The syntax captures the legal expressions of the program, what in the custom syntax DSL is captured by the grammar. The semantics of a program is what it means, that is what it does when it executes. In this case it is the model that defines those semantics - which is why I will refer to it as aSemantic Model. In this example theSemantic Modelis an object model. ASemantic Modelcan also take other forms. It can be a pure data structure with all behavior in separate functions. I would still refer to it as an active model, because the data structure defines the program s behavior. Looking at it from this point of view, the DSL merely acts as a mechanism for expressing how the model is configured. I often refer to a DSL as a thin facade over a framework. Much of the benefits of using this approach comes from the model rather than the DSLs. The fact that I can easily configure a new state machine for a customer is a property of the model, not the DSL. The fact that I can make a change to a controller at run-time, without compiling, is a feature of the model, not the DSL. The fact I m reusing code across multiple installations of controllers is a property of the model, not the DSL. A model provides many benefits without any DSLs present. As a result we use them all the time. We use libraries and frameworks to wisely avoid work. In our own software we construct our own models, building up abstractions that allow us to program faster. Good models, whether published as libraries and frameworks or just serving our own code, can work just fine without any DSL in sight. But DSLs can enhance the the capabilities of a model. The right DSL makes it easier to understand what a particular state machine does. Some DSLs allow you to configure the model at run time. DSLs are thus a useful adjunct to some models. In discussing this example I described a circumstance where the model was built first, and then I layered a DSL over the model to help manipulate it. I described it that way becuase I think that s an easy way to understand how DSLs fit into software development. Although the model-first case is a common one, it isn t the only one. In a different scenario you talk with the domain experts and posit that a state machine approach is something they understand. You then work with the domain experts to create a DSL that they can understand. In this case you build the DSL and model simultaneously. Using Code-Generation In my discussion so far, I process the DSL by populating theSemantic Modeland then execute theSemantic Modelto provide the behavior that I want from the controller. This approach is what s known in language circles as interpretation. When weinterpretsome text, we parse it and immediately produce the result that we want from the program. (Interpret is a tricky word in software circles, since it carries all sorts of connotations for people, however I ll use it strictly to mean this form of immediate execution.) In the language world, the alternative to interpretation is compilation. Withcompilation, we parse some program text and produce an intermediate output, which is then separately processed to provide the behavior we desire. In the context of DSLs the compilation approach is usually referred to ascode-generation. In this case this might mean generating some java code to represent the particular behavior of Miss Grant s controller. Code generation is often awkward in that it often pushes you to an extra compilation. To build your program you have to first compile the state framework and the parser, then run the parser to generate the source code for Miss Grant s controller, then compile that generated code. This makes your build process much more complicated. However an advantage of code generation is that there s no reason why you have to generate code in same programming language that you use for the parser. In this case you can avoid the second compilation step by generating code for a dynamic language such as javascript or jruby. Code generation is also useful when you want to use DSLs with a language platform that doesn t have the tools for DSL support. I ve come across recent projects that generate code for MathCAD, SQL, and COBOL. Many writings on DSLs focus on code-generation, even to the point of making code-generation the primary aim of the exercise. As a result you can find articles and books extolling the virtues of code-generation. In my view, however, code-generation is merely an implementation mechanism, one that isn t actually needed in most cases. Certainly there are plenty of times when you must use code-generation, but there are even more plenty of times when you don t need it. Using code-generation is one case where many people don t use aSemantic Model. In this case you parse the input text and directly produce the generated code. Although this is a common way of working with code-generated DSLs, it isn t one I reccommend for any but the very simplest cases. Using aSemantic Modelallows me to separate the parsing, the execution semantics, and the code generation into separate problems. This separation makes the whole exercise a lot simpler. It also allows me to change my mind. I can change my DSL from an internal to an external DSL (say) without altering my code-generation routines. Similarly I can easily generate multiple outputs without complicating my parse. I can also use both an interpreted model and code generation off the sameSemantic Model. As a result for almost all of this book, I m going to assume aSemantic Modelis present and the centre of the DSL effort. Using Language Workbenches The two styles of DSL I ve shown so far (internal and external) are the traditional ways of thinking about DSLs. They may not be as widely understood and used as they should be, but they have a long history and moderately wide usage. As a result the rest of this book concentrates on getting you started with these approaches using tools that are mature and easy to obtain. But there is a whole new category of tools on the horizon that could change the game of DSLs significantly tools I call Language Workbenches. ALanguage Workbenchis tool designed to help people create new DSLs, together with high quality tooling required to use those DSLs effectively. One of the big disadvantages of using an external DSL is that you re stuck with relatively limited tooling. Setting up syntax highlighting with a text editor is about as far as most people go. While you can argue that the simplicity of a DSL and the small size of the scripts means that may be enough, there s also an argument for the kind of sophisticated tooling that modern post-IntelliJ IDEs support. Language Workbenches make it easy not just to define a parser, but also to define a custom editing environment for that language. All of this is valuable, but the truly interesting aspect of language workbenches is that they allow a DSL designer to go beyond the the traditional text-based source editing, to different forms of language. The most obvious example of this is support for diagrammatic languages, which would allow me to specify the secret panel state machine directly with a state transition diagram. Figure 3 The secret panel state machine displayed in the MetaEdit language workbench.(source MetaCase) Not just does a tool like this allow you to have diagrammtic languages, it also allows you to look at a DSL script from multiple perspectives. In Figure3there is a diagram, but also lists of states and events, and a table to enter the event codes (which could be ommitted from the diagram if there s too much clutter there). This kind of multi-pane visual editing environment has been around for a while in lots of tools, but it s been a lot of effort to build something like this for yourself. One promise of language workbenches is that they make it quite easy to do this, certainly I was easily able to put together a similar example to Figure3quite quickly on my first play with the MetaEdit tool. The tools allows me to define theSemantic Modelfor state machines, define the graphical and tabular editors in Figure3and write a code generator from theSemantic Model. However, while such tools certainly look good, many developers are naturally suspicious of such doodleware tools. There are some very pragmatic reasons why a textual source representation makes sense. As a result other tools head in that direction, providing post-IntelliJ style capabilities such as syntax-directed editing, symbol completion and the like to textual languages. My own suspicion here is that if language workbenches really take off, the languages they ll produce aren t anything like what we consider to be a programming language. One of the common benefits of tools like this is that they allow non-programmers to program. I often sniff at that notion by pointing out that this was the original intent of COBOL. Yet I must also acknowledge a programming environment that has been extremely successful in providing programming tools to non-programmers who program without thinking of themselves of programming - spreadsheets. In programming language terms spreadsheets are based on a quite unusual computational model. Their appeal comes from a very deep integration of the notions of language and tool. Thus it s no surprise that Charles Simonyi combines both a history of development of these kinds of user tools with a long history of developing ideas in language workbenches. As a result I think that language workbenches have a remarkable potential. If they fulfill this they could entirely change the face of software development. This potential, however profound, is still somewhat in the future. It s still early days for language workbenches with new approaches appearing regularly and older tools still subject to deep evolution. As a result I don t have that much to say about them here, as I think they will change quite dramatically during the hoped-for lifetime of this book. But I do have a chapter on them at the end, as I think they are well worth keeping an eye on. Visualization One the great advantages of using a Language Workbench is that this enables you to a wider range of representations of the DSL, in particular graphical representations. However even with a textual DSL you can obtain a diagrammatic representation. Indeed we saw this very early on in this chapter. When looking at Figure1it might have struck you that the diagram was not as neatly drawn as I usually do. The reason for this is that I didn t draw the diagram, I generated it automatically from theSemantic Modelof Miss Grant s controller. Not just do my state machine classes execute, they also are able to render themselves use the dot language. The dot langauge is part of the GraphViz package, which is an open-source tool that allows you to describe mathematical graph structures (nodes and edges) and then automatically plot them. It figures out how to lay out the graph, you just tell it what the nodes and edges are, what shapes to use, and some other hints. Using a tool like GraphViz is extremely helpful for many kinds of DSLs because it gives another representation. Thisvisualizationrepresentation is similar to the DSL itself in that it allows a human to understand the model. The diference between a visualization and the source is that it isn t editable - however it can provide options that are too hard in an editable form, such as a diagram like this. In the terms of a language workbench you can think of a visualization as a read-only projection. It s something that can be less important for graphical language workbenches, since you use a diagram anyway, but it s still sometimes a handy technique. Visualizations don t have to be graphical. I often use a simple textual visualization to help me debug while I m writing a parser. I ve seen people generate visualizations in Excel to help communicate with domain experts. The point is that once you have done the hard work of creating a component framework like this, adding visualizations is really easy. You ll note here that the visualizations are produced from the framework, not the DSL, so you can do this even if you aren t using a DSL to populate the framework. Indeed the techniques in this book can be used for creating visualizations above and beyond DSL usage. A partial parser for a general purpose language can be used to visualize useful aspects of a general purpose program. Any interesting data strucutre can be visualized in interesting ways. Significant Revisions 06 Aug 07 First Draft 09 Apr 08 Split example from general issues
https://w.atwiki.jp/lspdfrinfo/pages/83.html
Immersive Ambient Events Immersive Ambient Eventsは、Echooo氏、AstroBurgers氏制作の、コールアウトとは別に路上で起こる事件を増やすプラグイン。 それ以外にも、悪天候イベントや車両捜索イベント等の様々なイベントが追加される。 またプラグインの説明曰く、このプラグインで起きるアンビエントイベントがなんらかのエラーが起きた場合、LSPDFR自体がクラッシュするのを防ぎ、イベントを強制終了し何事もなかったかのように新たにイベントが生成されるという、クラッシュ対策もされている。 ページ編集時の一般公開されている最新バージョン 1.4.0 ↓このプラグインの見どころなど + ... このプラグインは、コールアウトを追加するものではなく、パトロール中に起こるアンビエントイベントを追加します。 なので、パトロール中で暇になることが少なくなり、より現実味が増します。このプラグインのような、パトロール中に事件が起きるプラグインはあまり多くありません。 なぜなら、バグ(クラッシュ)が多いからです。 ですがこのプラグインはそれを防ぐべく、このプラグインで問題が起きてもLSPDFR全体がクラッシュすることをなるべく防いでくれます。 また、悪天候イベントや容疑者捜索といった、警官としてのアドリブ力も必要になってきます。 このプラグインにはタイマーシステムがあり、プラグインが忙しいと判断するとタイマーが止まり、イベントが起こらなくなります。そしてパトロールに戻り忙しいと判断されなくなると、タイマーがリセットされます。また負荷を下げるために、BOLOイベントを除くすべてのイベントは必ず1つしか発生しないようになっています。 また、徒歩の状態では一部のイベントが起きなくなっています。 プラグインのメニューではイベントを起こすことができませんが、RPHのコンソールで 「IAEOpenForceEventMenu」と入力すると、現在のイベントを終了させたり、任意のイベントを発生させることができます。 また、イベントに近づくと勝手にマップのブリップが消えるようになっています。 さらに、ここでは詳細に説明しませんが、PluginsフォルダのImmersive Ambient Eventsフォルダにある 「bolomodels.json」を書き換えるとプレイヤーが定期的に受ける容疑者の位置情報の通知内の車のメーカー、モデル、クラスの名前をカスタマイズでき、イベントで使用される車両のリストに新しい車両、アドオン車両を追加することもできます。 さらに、悪天候イベントにより同じ天気でパトロールすることがなくなります。 大体の時は嵐、雪が降っている場合は吹雪が発生します。 これにより停電が発生し、街全体が暗くなります。 アップデートにより「IAETogglePowerOutage」とRPHのコンソールに入力すると、悪天候イベントで発生する停電を手動で起こすことができるようになりました。 また、このプラグインはRansom Ambienceと互換性があり、競合しません。 ダウンロードはこちら 注意 このプラグインで発生するイベントは、プレイヤーが「追跡中」「コールアウト対応中」「職務質問中」は発生しません。 また、GrammarPoliceを導入している場合、一定のステータスになっている場合も発生しません。 トレーナーなどで有効にできる、ゲーム内時間を現実の時間とリンクさせる(同じ時間にする)設定を有効にすると、 悪天候イベントが上手く作動しない場合があります。 その場合、ImmersiveAmbientEvents.iniの HoursItLasts という欄を0にし、 MinutesItLasts の数値を、悪天候が続いてほしい時間の数値にしましょう。 必須 RPHおよびLSPDFR Newtonsoft.Json ┗ 同梱 インストール方法 1. ダウンロードしたファイルを解凍する 2. Grand Theft Auto Vフォルダ内の中身をすべてメインディレクトリへドラッグ ドロップして完了。 GrammarPoliceで使用したくない場合はpluginsフォルダ内のGrammarPoliceフォルダを導入せずImmersiveAmbientEventsフォルダ、dll、pdb、iniのみをドラッグ&ドロップしよう。 プラグインと依存関係 メインディレクトリまでは割愛。 ┣ Newtonsoft.Json.dll (プラグインの動作に必要なライブラリ) ┣ plugins ┃ ┗ LSPDFR ┃ ┣ ImmersiveAmbientEvents.dll (プラグイン本体) ┃ ┣ ImmersiveAmbientEvents.ini (プラグインの構成設定) ┃ ┣ ImmersiveAmbientEvents.pdb (プラグインの何かしらのプログラムが入った何か) ┃ ┣ GrammarPolice (プラグイン「GrammarPolice」と互換性を持たせるための設定が入ったフォルダ) ┃ ┗ ImmersiveAmbientEvents ┃ ┣ bolomodels.json (BOLOイベントで使用される車両の会社名や表示名が設定されたjsonファイル) ┃ ┗ ActiveBOLOs (ゲーム内で発生したBOLOイベントの設定を保存するためのフォルダ) ┃ ┗ XmlConfigs (ゲーム内で発生するイベントのxml設定を保存するためのフォルダ) ┗ lspdfr ┗ audio ┗ scanner ┗ ImmersiveAmbientEventsAudio (プラグインが使用する無線音声が入ったフォルダ) 操作方法 注意 これは、デフォルトのキー配置です。 プラグインメニューを開くキー 左シフト+Oキー 特殊操作 RPHのコマンドに 「IAEOpenForceEventMenu」と入力 任意のイベントの発生・現在発生中のイベント終了 「IAETogglePowerOutage」と入力 島の停電の状態を切り替え イベントの詳細 注意 このイベントの解説内容とはアップデート等により変更されている可能性があります。 攻撃的な運転をする車 飲酒運転の疑惑がある車 燃料が漏れている車 信号待ち中にエンジンを空吹きする車 停車中の車の中で麻薬を喫煙する人 悪天候アラート 容疑者捜索 車両故障(エンジントラブル) スピード違反 違法改造車 ストリートレース わき見運転 麻薬取引 ImmersiveAmbientEvents,ini [General] //Time between events, in seconds. //Events are set up to not start if youre in a pursuit, on a callout, in the middle of a traffic stop, or not available for calls TimeBetweenEvents = 150 ...イベントが発生するまでのクールタイム。初期設定は150。(秒) イベントの頻度を上げたいなら数値を低くしよう。 TimeBetweenBOLOEvents = 90 ...BOLO(Be On the LookOut)イベントの発生する頻度の値。初期設定は90。(秒) Be On the LookOutは、容疑者の捜索などを指します。 //Enable or disable blips for events (yellow question mark on minimap) EventBlips = true ...イベントが発生した際にマップにブリップ(マップマーク)が表示されるかどうか。初期設定は有効(true)。 //Enable or disable notifications for events EventNotifications = true ...イベントが発生した際に通知が表示されるか。初期設定は有効(true)。 //In order to configure the time format for your respective country, use this link // https //learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a //Copy the BCP-47 code on the far right column and paste it down below TimeFormat = en-US ...悪天候イベント等で使用されるゲーム内での時刻の形式。初期設定はアメリカ。 //Allows you to customize the format of the plate (which values are numbers, letters, or space) for those that have games based in the //UK or other places that have a specific plate format, the 46EEK572 is just for memes, any number/letter/space can be inputted. //The maximum count is 8, if the value below is above 8 characters, it will be trimmed down to 8 automatically PlateFormat = 46EEK572 ...BOLOイベントの車両のナンバープレート設定。初期設定は46EEK572。 文字数の最大は8。8文字を超える場合は自動的に8文字になる。 //This enables/disables the system that events such as street racing uses that spawns in a customized vehicle. If you replaced your //civ vehicles with real life versions, or altered the civ vehicles in some way, it is suggested to disable this CustomizedVehicles = true ...ストリートレース等のイベントの際、改造された車両を使用するかどうか。初期設定は有効(true)。 一般車として出てくる車両が改造できない車両にしている場合、無効にすることをお勧めします。 [Keybinds] //Key for the plugins menu MenuKey = O ...メニューを開くキー。初期設定はOキー。 //Modifier key for the plugins menu, if you do not want to use a modifier key set this to "None" MenuModifierKey = LShiftKey ...メニューを開く修飾キー。初期設定は左シフトキー。 [WeatherEvent] Enabled = true ...悪天候イベントが発生するかどうか。初期設定は有効(true)。 //If this is set to true, the time displayed in the event notification will be based on 24 hour time, not 12 hour time //(used mainly in the weather event) 24HTime = false ...イベント通知に表示される時刻が24時間制かどうか。初期設定は無効(false)。(つまり初期設定は12時間制) //Hours and minutes the weather event lasts (VIA IN GAME TIME, NOT IRL) HoursItLasts = 3 ...悪天候イベントが始まって何時間で終わるか。初期設定は3時間。 これは、ゲーム内時間で何時間続くかを示している。 MinutesItLasts = 0 ...悪天候イベントが始まって何分で終わるか。初期設定は分の調整なし。 これは、ゲーム内時間で何時間続くかを示している。 //Option to disable the EAS audio, since some people may not like it EASaudio = true ...悪天候イベントが発生した際、Emergency Alert Systemの音声を流すかどうか。初期設定は有効(true)。 //Percentage chance of a power outage happening during the event ChanceOfOutage = 20 ...悪天候イベントが発生した際に停電が起こる確率。初期設定は20。(%) //Time power outage lasts (in seconds) TimeOutageLasts = 200 ...停電が続く時間。初期設定は200。(秒) [VehicleBOLOEvent] Enabled = true ...容疑者捜索イベントが発生するかどうか。初期設定は有効(true)。 //Enable or disable the large yellow search areas for BOLOs AreaBlips = true ...容疑者がいるエリアに黄色の捜索範囲がマップに表示されるかどうか。初期設定は有効(true)。 //Documentation for all possible colors https //learn.microsoft.com/en-us/dotnet/api/system.drawing.knowncolor? view=net-7.0 AreaBlipColor = Yellow ...捜索範囲のエリア表示の色。初期設定は黄色。ここにアクセスすると自分の好きな色に指定可能。 //The opacity/transparency of the search area. Values can be between 0.1 and 1.0, do not add extra decimals places, like 0.12 AreaBlipOpacity = 0.4 ...探索範囲エリアの不透明度。初期設定は0.4。0.1から1.0まで指定できるが、0.12など余分な小数点は指定不可。 //Sets up a percentage chance of an ambient unit starting a pursuit instead of you getting a suspect location update, set this //to 0 to disable this feature ChanceOfPursuit = 5 ...プレイヤーが定期的に受ける容疑者の位置情報の代わりに他の警官が容疑者を発見する確率。初期設定は5。(%) //Maximum distance in meters (in terms of you and the suspect) for an ambient unit to be able to start a pursuit MaxDistanceForPursuit = 1000 ...LSPDFRのアンビエントユニットが有効な場合、捜索中の容疑者が何メートル近づいたら追跡が始まるか。 初期設定は1000。(メートル) //Maximum distance in meters (in terms of you and the suspect) for you to receive updates on the suspects location (if this is enabled in the menu) MaxDistanceForUpdates = 1000 ...プレイヤーが定期的に受ける容疑者の位置情報が何メートル近づいたら受け取るかの設定。初期設定は1000。(メートル) //Minimum and maximum range of time (in seconds) before you get an update on the vehicle BOLO MinTimeForUpdate = 20 MaxTimeForUpdate = 50 ...プレイヤーが定期的に受ける容疑者の位置情報の頻度。初期設定は最低20、最大50。(秒) //IRL days before the BOLo expires and a new one is made DaysBeforeBOLOExpires = 7 ...BOLOイベントの容疑者が容疑者ではなくなる(捜索打ち切り)になるまでの現実の日数。 初期設定は7日。 [VehicleTroubleEvent] Enabled = true ...車両トラブルイベントが発生するかどうか。初期設定は有効(true)。 [HotboxingEvent] Enabled = true ...車内での麻薬喫煙イベントが発生するかどうか。初期設定は有効(true)。 [DrugDealEvent] Enabled = true ...麻薬取引イベントが発生するかどうか。初期設定は有効(true)。 [StreetRacingEvent] Enabled = true ...ストリートレースが発生するかどうか。初期設定は有効(true)。 //Percentage chance of a street racer using nitro during a pursuit. The chance is ran at a random interval between 20 and 35 seconds. //Set this to 0 to disable this feature. NitroChance = 70 ...ストリートレーサーが追跡中にニトロを使用する確率。初期設定は70%。 ランダムで20秒から35秒に一回試行され、設定された確率で使用する。無効にする場合は0にしよう。 //Percentage chance of a street racer turning off their lights during a pursuit if the pursuit is at night. The chance is ran at a random //interval between 20 and 35 seconds. Set this to 0 to disable this feature. BlackoutChance = 20 ...ストリートレーサーが夜間の追跡中にライトを消す確率。初期設定は20%。 ランダムで20秒から35秒に一回試行され、設定された確率で使用する。無効にする場合は0にしよう。 //Enables/disables custom plates for street racers ('GoodLuck', 'GoFast', etc) CustomPlates = true ...ストリートレーサーの車両のナンバープレートが「GoodLuck」や「GoFast」といったナンバープレートになるかどうか。 初期設定は有効(true)。 //When enabled, the street racers max speeds will be limited to approximately 100mph during pursuits, when disabled, they will //go as fast as their car lets them (varies based on their location, for example city streets vs highway) RealisticSpeeds = false ...ストリートレーサーとの追跡の際、ストリートレーサーの車両の速度を制限するかどうか。 初期設定は無効(false)。有効にすると車両の性能に関係なく約100mphに制限される。 無効だと車の性能、道路によって最高速度が変化する。 [AggressiveDriverEvent] Enabled = true ...攻撃的な運転手イベントが発生するかどうか。初期設定は有効(true)。 [DrunkDriverEvent] Enabled = true ...飲酒運転イベントが発生するかどうか。初期設定は有効(true)。 [GasLeakEvent] Enabled = true ...車両のガス漏れイベントが発生するかどうか。初期設定は有効(true)。 [RevAtLightEvent] Enabled = true ...運転中の空ぶかし・バーンアウトイベントが発生するかどうか。初期設定は有効(true)。 [SpeedingEvent] Enabled = true ...スピード違反の車が現れるイベントが発生するかどうか。初期設定は有効(true)。 また、周りの車両の平均速度に基づいて速度を動的に選択する新しいシステムを使用しているため、 高速道路で発生した場合、160マイルなどで違反をするということ。 [DriverOnPhoneEvent] Enabled = true ...いわゆる「ながらスマホ」イベントが発生するかどうか。初期設定は有効(true)。
https://w.atwiki.jp/type74rx-t/pages/238.html
Update History 20/08/29Sorry.I have written "!=" instead of "!==" in the plugin.Please update the plugin if you have this plugin installed, to avoid incomprehensible errors and problems. This plugin is compatible with RPG Maker MV and RPG Maker MZ. Summary Gathering the specified events to the player s location. And, You can also gathering events by specifying the coordinates. Usage 【Event command "Script"】 (This is the only way to set it up in RPG Maker MV.) To gather Event ID 1, Event ID 3, and Event ID 5 at the player s location this.ev_gather([1, 3, 5]); If you want to gather events in a specific coordinate, you can use Set up additional X and Y as shown below. this.ev_gather([eventID1, eventID2], x, y); 【Plugin Command】 (This method is exclusive to RPG Maker MZ.) ★Event ID The event ID of the target you want to gather. Multiple selections are possible. Example 1-4, 5, 14, 59-63 ★Move to X(or Y) Position to gather events. If both X and Y are set to -1, they will gather at the same position as the player. Download https //img.atwikiimg.com/www20.atwiki.jp/type74rx-t/attach/235/400/RX_T_EvGather.zip
https://w.atwiki.jp/p2rdj/pages/1566.html
メズラン Mezlan The bizarre shapeshifters known as mezlans were created ages ago as spies and infiltrators by a long-forgotten ritual infusing a magically constructed ooze with the soul of an exceptional sapient being. Having long since outlasted their creators, mezlans most often dwell alone amongst the ruins of the ancient civilizations they served as mortals. “知識の想起”――粘体(〈伝承学〉) DC 37 一般的な知識 DC 35 専門知識 DC 32 メズラン Mezlan クリーチャー14 レア N 中型 粘体 出典 Bestiary 3 167ページ 知覚+25;暗視 言語 アクロ語、Azlanti;polyglot 技能 〈運動〉+28、〈隠密〉+28、〈伝承学〉+24、〈ペテン〉+27 (+31 to Impersonate) 【筋】+8、【敏】+6、【耐】+5、【知】+4、【判】+5、【魅】+5 Polyglot/Polyglot A mezlan can speak and understand any language they hear spoken after listening to the language for 1 minute. These languages fade from their mind after 24 hours. AC 31;頑健+25、反応+28、意志+23;魔法に対する全てのセーヴに+1の状態ボーナス HP 260、再生15(deactivated by [強酸]);完全耐性 クリティカル・ヒット、[精密]、気絶状態 ;弱点 [強酸]10 Absorb Spell/Absorb Spell [reaction] トリガー The mezlan succeeds at a saving throw against a single-target spell; 効果 The mezlan absorbs the spell, nullifying its effect and storing it for later. They can Cast the Spell using the original caster's spell attack modifier and DC. They can store only one spell at a time, but they can absorb a new spell to replace the spell they currently have stored. A willing caster can allow the mezlan to Absorb a Spell without requiring a save. Discorporate/Discorporate When the mezlan is reduced to 0 Hit Points、their body dissolves into colorless slime and begins seeping into nearby cracks or porous surfaces. If this material is not immediately contained or destroyed、the mezlan will eventually re-form、though they may lie dormant for years or even decades before doing so. 移動速度 30フィート 近接 [one-action] polymorphic appendage +30[+25/+20](魔法、多用途:[刺突]、多用途:[斬撃])、ダメージ 3d12+14[殴打] 遠隔 [one-action] ooze globule +28[+23/+18](射程単位30フィート)、効果 viscous trap 変身 [one-action] (精神集中、完全変身、変成術) The mezlan assumes the form of any Medium or Small creature, excluding those with the elemental, incorporeal, or swarm traits but including specific individuals whose appearance they've seen. This doesn't change the mezlan's Speed or their attack and damage bonus with their Strikes, but the damage type dealt by their Strikes might change based on their new form. Extend Limb/Extend Limb [one-action] The mezlan extends one of their limbs, granting themself a reach of 20フィート with their polymorphic appendages until the end of their next turn. Viscous Trap/Viscous Trap A creature hit by the mezlan's ooze globule takes a –15-foot circumstance penalty to all Speeds for 1 minute. On a critical hit, a target standing on a solid surface also becomes immobilized, while a target Flyingvia wings falls to the ground and becomes unable to Fly. A target can end all effects by Escaping (DC 32) or spending a total of 3 Interact actions to free itself. 追加の知識:Keepers of Secrets Keepers of Secrets Despite their strange nature, all mezlans retain the minds of the individuals they were before being transformed, making them potential repositories of knowledge long forgotten by any living creature. However, millennia of isolation have rendered most mezlans' personalities eccentric at best, with inscrutable motivations, so explorers brave enough to seek them out are advised to be wary
https://w.atwiki.jp/eveon/pages/179.html
PvP / 戦争>ロケーター ロケーターとは? ロケーターの探し方 ロケーターの使い方 ロケーターとは? ロケーターとは「ロケーターエージェント」の略で、 指定された名前のプレイヤーが現在どこに居るか調べる機能です。 エージェントが所属する「NPCコープ」または「ファクション」の「スタンディング」が、 そのエージェントのミッションを受けられるだけあると利用できます。 ロケーターの利用には、1回250k程度の費用と依頼してから5分ほどの待ち時間 そして1度利用したら再利用するまで待ち時間が1時間必要です。 ※別のエージェントを使えば時間制限は無視できます。 ロケーターの探し方 まず、あなたが利用する「ファクション」「NPCコープ」を 「キャラクター情報」>「スタンディング」>「友好的 (相手から)」で 右クリックし「翻訳コピー」します。 自分が利用したい地域のファクションを選択すると探しやすいです。 次にチャットなどへ右クリック「貼り付け」または「CTRLキー+Vキー」で貼り付けします。 これによりそのファクションの「英語の名前」がわかります。 外部サイトのEVE Agentsを開きます。 「Faction」を先ほど調べた英語の名前にセットし、 「Locator」を「YES」にセットして、下の「Search」を押します。 Lvの高いエージェントほど検索が早いので、「Level」で絞込みできます。 また「Region (リージョン)」で地域も絞り込みできます。 右側に画像のようなエージェント一覧が出るので、 「Station」の住所をコピーします。 EVE内でチャットなどに貼り付けて、マウスでドラッグして範囲選択した後、 「自動リンク」>「ステーション」します。 これでエージェントの居るステーションのリンクができました。 あとは右クリックして「位置を保存」するなり「目的地に設定」して会いに行きます。 ロケーターの使い方 エージェントの居るステーションに到着したら、エージェントと会話します。 「キャラクター探索」から探したいプレイヤー名を入力します。 プレイヤーを探すかどうか確認してくるので「受諾」します。 受諾する前の段階で、WHなどのロケーターが探せない場所に居る場合は、 以下のように依頼を断ってきます。 逆にこの事でそのプレイヤーがWHに居る事は無料で確認できます。 5分程度でEVEメールの通知に「依頼どおり~を探し出したぞ。」というメールが届きます。 本文中に「どのソーラーシステム」の「どのステーション」に居るか書かれています。 これを「人物と位置」から検索するか、 自動リンクを使ってリンクを作成すれば目的地に設定できます。 ※登場するプレイヤーは、執筆者の休眠キャラになります。